package com.xy.demo.thread;

import com.xy.demo.Test.ExtendTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.persistence.EntityManager;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @BelongsProject: bill
 * @BelongsPackage: com.xy.demo.thread
 * @Author: YangHao
 * @CreateTime: 2023-08-09  16:00
 * @Description: 线程运行类
 * @Version: 1.0
 */
public class ThreadRun implements Runnable {

    private static final Logger logger = LoggerFactory.getLogger(ExtendTest.class);

    protected EntityManager em;
    protected String methodName; //调用方法名

    protected Object object;

    protected String className = "com.xy.demo.thread.ThreadMethodTest"; //默认调用类

    public ThreadRun(String methodName,Object object) {
        this.methodName = methodName;
        this.object = object;
    }

    /**
     *
     * @param className 类名
     * @param methodName 执行的线程 方法
     * @param object  线程方法参数
     */
    public ThreadRun(String className,String methodName,Object object) {
        this.className = className;
        this.methodName = methodName;
        this.object = object;
    }

    @Override
    public void run() {
//        try {
//            //事务执行
//            JPA.withTransaction(new play.libs.F.Callback0() {
//                @Override
//                public void invoke() throws Throwable {
//                    Init();
//
//                    Class<?> clazz = Class.forName(className);
//                    ////实例化无参构造函数
//                    //Object o=clazz.newInstance();
//
//                    //实例化带参构造函数
//                    Constructor<?> c = clazz.getConstructor(Dao.class,Object.class);
//                    Object o = c.newInstance(dao,object);
//
//                    //通过getMethon方法取得setName这个方法的实例化对象，方法名称与参数类型
//                    //Method setMethod=cl.getMethod(methodName, String.class);
//                    Method setMethod=clazz.getMethod(methodName);
//                    //通过invoke调用方法
//                    setMethod.invoke(o);
//                }
//            });
//            close();
//        }catch (Exception e) {
//            Logger.error("##############ThreadRun Error############:" + e.getMessage(), e);
//        } finally {
//            close();
//        }
    }

//    //打开数据库链接
//    public void Init() {
//        em = JPA.em();
//        dao = new Dao(em);
//        cache = dao.getRedis();
//        cao = new CommonDao(dao);
//    }
//
//    //关闭数据库链接
//    public void close() {
//        if (dao != null) {
//            dao.close();
//        }
//    }
}
